package codec

import (
	"gogogo-server/engine/cororpc"
	"reflect"
)

// TypeMsgId msgId的类型
type TypeMsgId = string

// IMsgProcessor 消息处理器
type (
	IMsgProcessor interface {
		Route(arg cororpc.IMessageArg) error                // Route 路由
		Marshal(arg cororpc.IMessageArg) ([][]byte, error)  // Unmarshal 编码
		Unmarshal(data []byte) (cororpc.IMessageArg, error) // Marshal 解码
		RegisterRouter(args ...any)                         // 设置消息转发的逻辑模块,不同的解析模块,可能参数规矩不一样
	}

	//TypeMsgHandler func([]any)

	// MsgInfo msg信息
	MsgInfo struct {
		MsgType          reflect.Type
		MsgCoroRPCServer *cororpc.RPCServer // 转发到哪个CoroRPC
		//MsgHandler       TypeMsgHandler     // unmarshal后的数据回调
		//MsgRawHandler    TypeMsgHandler     // 原始数据直接回调
	}
	// BaseProcessor 消息处理的基础结构
	BaseProcessor struct {
		MsgInfos map[any]*MsgInfo
	}
)
